function add(a, b) {
    return a + b
}

function list(a, b) {
    return a + b
}
class A {
    constructor(num) {
        console.log(num);
    }
}
//导出模块
module.exports = {
    add,
    list,
    A
}
exports = {
    add,
    list,
    A
}
let obj = {}
let obj2 = {}
//导出模块2

console.log(module.exports === exports); //true
console.log(obj === obj2);
let fs = require("fs")
let past = require("past")
let str = path.join(__dirname,"src","commom.js")
console.log(str);
// exports={
//     add,
//     list,
//     A
// }

/*
    模块导出细节
     module.exports  是一个Node环境提供的一个对象， 作用是导出模块
     如果没有写导出，直接导出的是一个空对象，结果是一个空对象
     也就是说 ，module.exports 本身就是一个对象

     node 内存中还存在一个导出对象 exports
     本质上 module.exports === exports 
     两个对象全等 说明两个对象指向的是同一个堆储存
     但是实际上我们导出的是 module.exports

     导入细节与原理
     1.require 是node环境提供的一个导入模块的方法 ，作用就是导入模块
     2.require 接收的参数格式是String（路径形式或模块名称）

    Node 中的路径分为相对路径和绝对路径
    如果 require 引入的是相对路径 ，那么路径的参考点是当前调用require方法的这个模块
    除了 require 之外 ，其他相对路径参考点都是工作目录（命令行所在的目录），工作路径是可变的，尽量使用绝对路径
    绝对路径
    绝对路径是从根目录开始的（盘符）

    如果接收的参数不是一个路径，而是一个模块名称的话， 那么我们引入的就不是一个模块
    而是一个包

 npm install 快速安装
 检测 package.join中的


*/